package com.party.core.dao.read.member;

import com.party.common.paging.Page;
import com.party.core.dao.read.BaseReadDao;
import com.party.core.model.member.Member;
import com.party.core.model.member.MemberWithPartner;
import com.party.core.model.member.PartnerAccount;
import com.party.core.model.member.PartnerInfoDetails;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;

import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Set;

/**
 * 会员数据读取
 * party
 * Created by wei.li
 * on 2016/8/11 0011.
 */
@Repository
public interface MemberReadDao extends BaseReadDao<Member> {

    /**
     * 根据登录名查询会员信息
     * @param loginName 登陆名称
     * @return 会员信息
     */
    Member findByLoginName(@Param("loginName") String loginName, @Param(value = "type") Integer type);

	Member findByMobile(@Param("mobile") String mobile, @Param(value = "type") Integer type);

    Member findByUserName(@Param("userName") String userName);

	List<Member> webListPage(@Param("params") Map<String, Object> params, @Param("member") Member member, Page page);

	/**
	 *
	 * @param value username或者mobile
	 * @param userId
	 * @param key username或者mobile
	 * @return
	 */
	List<Member> checkUserName(@Param("value") String value, @Param("key") String key,
							   @Param("userId") String userId, @Param("type") Integer type);

    List<Map<String,Object>> findMemberByPhoneOrName(@Param("property") String property, @Param("value") String value,
													 @Param("type") Integer type);

	List<Map<String,Object>>  findPartnerMemberByPhoneOrName(@Param("property") String property, @Param("value") String value,
															 @Param("type") Integer type,@Param("partnerId") String partnerId);

	List<Map<String,Object>>  findPartnerMemberByPhoneOrName2(@Param("property") String property, @Param("value") String value,
															 @Param("type") Integer type,@Param("orgIds") List<String> orgIds);
	/**
	 * 根据日期统计会员
	 * @param parameter 统计参数
	 * @return 统计数据
	 */
	List<HashMap<String, Object>> countByDate(@Param(value = "parameter") HashMap<String, Object> parameter);

	/**
	 * 统计所有会员数
	 * @param parameter 统计参数
	 * @return 统计数据
	 */
	Integer count(@Param(value = "parameter") HashMap<String, Object> parameter);

	/**
	 * 获取用户头像是远程路径的用户
	 * @return
	 */
	List<Member> getRemoteLogoList(@Param(value = "start") Integer start, @Param(value = "limit") Integer limit);

	/**
	 * 合作商简易信息列表
	 * @param member 用户信息
	 * @param page 分页信息
	 * @return
	 */
	List<Member> partnerSimpleListPage(@Param("member") Member member, Page page);

	/**
	 * 根据众筹id获取合伙人
	 * @param projectId 合伙人
	 * @return
	 */
    Member findByProjectId(String projectId);

    List<String> findByMobileOrRealName(@Param(value = "mobile") String mobile, @Param(value = "name") String name,
										@Param(value = "type") Integer type);


	/**
	 * 通过会员ID取得合作商的提现账号
	 * @param memberId
	 * @return
	 */
	PartnerAccount getPartnerAccountByMemberId(String memberId);

    /**
     * 获取所有渠道分销用户id
     * @return
     */
    List<String> getAllChannelDis();
    /**
    * @Description: 获取公司名为空的合作商
    * @Param:
    * @return:
    * @Author: Hua Qunhao
    * @Date: 2019-02-26-0026
    */
    List<Member> getMemberCompanyIsNull();

	/**
	 * @param loginName 登录名
	 * @return 旧的用户
	 * @Author yifeng
	 * @Description 获取手机号对应的旧用户
	 * @Date 10:04 2019/5/16
	 **/
	Member findByLoginNameOld(@Param(value = "loginName") String loginName, @Param(value = "queryUserName") boolean queryUserName);

	List<Map<String,Object>> batchMemberList( @Param("ids")Set<String> ids);
}
